Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


android/app/src/main/python/usb4a/usb.py e0f1f99cd1c208c5008a936230c38e448dddd45d (e0f1f99c) Text, 3.29 KB

T8b949e# SPDX-License-Identifier: MIT
T8b949e"""USB module for Android (Chaquopy / MeshChatX).

Based on usb4a 0.3.0 by Quan Lin. Context comes from MeshChatX instead of
Kivy org.kivy.android.PythonActivity.
"""

Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations

Tff7b72from T7ee787jnius Tff7b72import Te6edf3autoclass

Te6edf3Context Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff"Ta5d6ffandroid.content.ContextTa5d6ff"Tb4b4b4)
Te6edf3Intent Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff"Ta5d6ffandroid.content.IntentTa5d6ff"Tb4b4b4)
Te6edf3PendingIntent Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff"Ta5d6ffandroid.app.PendingIntentTa5d6ff"Tb4b4b4)
Te6edf3UsbConstants Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff"Ta5d6ffandroid.hardware.usb.UsbConstantsTa5d6ff"Tb4b4b4)
Te6edf3UsbRequest Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff"Ta5d6ffandroid.hardware.usb.UsbRequestTa5d6ff"Tb4b4b4)
Te6edf3ByteBuffer Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff"Ta5d6ffjava.nio.ByteBufferTa5d6ff"Tb4b4b4)

Te6edf3USB_RECIPIENT_DEVICE Tff7b72= T79c0ff0x00
Te6edf3USB_RECIPIENT_INTERFACE Tff7b72= T79c0ff0x01
Te6edf3USB_RECIPIENT_ENDPOINT Tff7b72= T79c0ff0x02
Te6edf3USB_RECIPIENT_OTHER Tff7b72= T79c0ff0x03

T8b949e# Set by meshchat_wrapper from the Android Activity before RNS starts.
Te6edf3context Tff7b72= Tff7b72None


Tff7b72class T56d364USBErrorTb4b4b4(Tf85149IOErrorTb4b4b4)Tb4b4b4:
T8b949e"""USB Error class."""


Tff7b72def Td2a8ffset_contextTb4b4b4(Te6edf3android_contextTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Install the Android Context used for UsbManager lookups."""
Tff7b72global Te6edf3context
Te6edf3context Tff7b72= Te6edf3android_context


Tff7b72def Td2a8ffget_contextTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Return the injected Activity / Context."""
Tff7b72if Te6edf3context Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72raise Tf85149RuntimeErrorTb4b4b4(
Ta5d6ff"Ta5d6ffUSB context is not set. MeshChatX must pass the Activity into Ta5d6ff"
Ta5d6ff"Ta5d6ffmeshchat_wrapper.start_server before opening RNode USB ports.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3context


Tff7b72def Td2a8ffget_usb_managerTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Get USB manager object from the system."""
Tff7b72return Te6edf3get_contextTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffgetSystemServiceTb4b4b4(Ta5d6ff"Ta5d6ffusbTa5d6ff"Tb4b4b4)


Tff7b72def Td2a8ff_device_list_valuesTb4b4b4(Te6edf3usb_managerTb4b4b4)Tb4b4b4:
Te6edf3device_map Tff7b72= Te6edf3usb_managerTff7b72.Td2a8ffgetDeviceListTb4b4b4(Tb4b4b4)
Te6edf3values Tff7b72= Te6edf3device_mapTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72return Tffa657listTb4b4b4(Te6edf3valuesTff7b72.Td2a8fftoArrayTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tffa657listTb4b4b4(Te6edf3valuesTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3result Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3iterator Tff7b72= Te6edf3valuesTff7b72.Td2a8ffiteratorTb4b4b4(Tb4b4b4)
Tff7b72while Te6edf3iteratorTff7b72.Td2a8ffhasNextTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3iteratorTff7b72.Td2a8ffnextTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3result


Tff7b72def Td2a8ffget_usb_device_listTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Get USB device list."""
Tff7b72return Te6edf3_device_list_valuesTb4b4b4(Te6edf3get_usb_managerTb4b4b4(Tb4b4b4)Tb4b4b4)


Tff7b72def Td2a8ffget_usb_deviceTb4b4b4(Te6edf3device_nameTb4b4b4)Tb4b4b4:
T8b949e"""Get a USB device object by device name path."""
Tff7b72for Te6edf3usb_device Tff7b72in Te6edf3get_usb_device_listTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3usb_device Tff7b72and Tffa657strTb4b4b4(Te6edf3usb_deviceTff7b72.Td2a8ffgetDeviceNameTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72== Tffa657strTb4b4b4(Te6edf3device_nameTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3usb_device
Tff7b72return Tff7b72None


Tff7b72def Td2a8ffhas_usb_permissionTb4b4b4(Te6edf3usb_deviceTb4b4b4)Tb4b4b4:
T8b949e"""True when permission is granted for the given USB device."""
Tff7b72return Tffa657boolTb4b4b4(Te6edf3get_usb_managerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffhasPermissionTb4b4b4(Te6edf3usb_deviceTb4b4b4)Tb4b4b4)


Tff7b72def Td2a8ffrequest_usb_permissionTb4b4b4(Te6edf3usb_deviceTb4b4b4)Tb4b4b4:
T8b949e"""Request permission for the given USB device."""
Te6edf3usb_manager Tff7b72= Te6edf3get_usb_managerTb4b4b4(Tb4b4b4)
Te6edf3action Tff7b72= Ta5d6ff"Ta5d6ffcom.meshchatx.USB_PERMISSIONTa5d6ff"
Te6edf3intent Tff7b72= Te6edf3IntentTb4b4b4(Te6edf3actionTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3pintent Tff7b72= Te6edf3PendingIntentTff7b72.Td2a8ffgetBroadcastTb4b4b4(Te6edf3get_contextTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3intentTb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3pintent Tff7b72= Te6edf3PendingIntentTff7b72.Td2a8ffgetBroadcastTb4b4b4(
Te6edf3get_contextTb4b4b4(Tb4b4b4)Tb4b4b4,
T79c0ff0Tb4b4b4,
Te6edf3intentTb4b4b4,
Te6edf3PendingIntentTff7b72.Td2a8ffFLAG_IMMUTABLETb4b4b4,
Tb4b4b4)
Te6edf3usb_managerTff7b72.Td2a8ffrequestPermissionTb4b4b4(Te6edf3usb_deviceTb4b4b4, Te6edf3pintentTb4b4b4)


Tff7b72def Td2a8ffbuild_usb_control_request_typeTb4b4b4(Te6edf3directionTb4b4b4, Te6edf3usb_typeTb4b4b4, Te6edf3recipientTb4b4b4)Tb4b4b4:
T8b949e"""Build USB control request type for USB communication."""
Tff7b72return Te6edf3direction Tff7b72| Te6edf3usb_type Tff7b72| Te6edf3recipient


Tff7b72def Td2a8ffarraycopyTb4b4b4(Te6edf3sourceTb4b4b4, Te6edf3sourceposTb4b4b4, Te6edf3destTb4b4b4, Te6edf3destposTb4b4b4, Te6edf3numelemTb4b4b4)Tb4b4b4:
T8b949e"""Python version of System.arraycopy() in Java."""
Te6edf3destTb4b4b4[Te6edf3destpos Tb4b4b4: Te6edf3destpos Tff7b72+ Te6edf3numelemTb4b4b4] Tff7b72= Te6edf3sourceTb4b4b4[Te6edf3sourcepos Tb4b4b4: Te6edf3sourcepos Tff7b72+ Te6edf3numelemTb4b4b4]


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────